OAuth?
새로운 사이트에 들어가서 로그인을 할 때, 아이디, 비번을 입력하는 것이 아니라, 구글이나 네이버, 카카오톡을 이용하여 로그인을 해본 경험이 다들 한번 쯤 있을 것이다.
그 예시로 yes24에서 로그인을 하는 과정을 확인해 보겠다.

로그인 버튼을 누르면, 사용하려는 사이트가 아니라 로그인을 하기로 선택한 사이트의 팝업 혹은 새 탭이 보이게 된다. 그리고 그 화면에서 로그인 정보를 받는다.
예를 들어, yes24에서 카카오로 로그인을 선택하면, 카카오에서 로그인 정보를 받는다.

그 이후에는 로그인 정보를 받은 사이트가 사용하고 싶은 사이트에 어떤 정보를 넘길지 물어보는 창을 보여주게 된다.
예를 들어서 yes24에서 카카오로 로그인을 할때, 로그인 정보를 다 넘기게 되면, 아이디와 추가 서비스에 대한 동의를 받게 된다.

동의를 하고 확인 버튼을 누르면, 사용하고 싶은 사이트에 로그인이 완료되어 있는 것을 볼 수 있다.
이러한 과정에서 카카오와 같은 사이트는 yes24와 같은 서비스에게 사용자의 정보를 넘겨주기도 하고, 다음부터 로그인을 할 때는 유저를 인증하는 수단이 되기도 한다.
이렇게 yes24와 같이 서비스를 제공하는 사이트/어플리케이션에서 비밀번호를 만들지 않아도 로그인을 할 수 있도록 하고, 사용자의 리소스에 액세스 할 수 있는 권한을 부여하는 개방형 표준 인증 프레임워크를 OAuth라고 한다.
infoteam에서 OAuth
사실 인포팀은 외부에게 사용자의 정보를 줄 필요는 없다. (인포팀 안에서만 사용자의 정보를 가지고 있으면 된다.) 그렇다면 왜 OAuth가 필요할까?
크게 두가지의 이유가 있다.
- 인포팀의 모든 어플리케이션은 사실 각기 다른 어플리케이션으로 동작하도록 설계를 하고 있다.
따라서 모든 서비스에서 각자의 로그인 로직을 가지고 있었다. 이는 인포팀이 제공하는 하나의 서비스에 로그인을 해도 다른 서비스에서 새로 로그인을 해야하는 불편함을 야기했다.
- 인포팀이 서비스를 제공하는 대상에 대한 인증이 필요하다.
인포팀은 기본적으로 지스트 구성원들에게 서비스를 제공하는 것을 목표로 한다. 따라서 지스트 구성원임을 인증하는 과정이 필요한데 이를 하나의 서비스에서 전담하여 하는 것이 더 효율적이었다.
위의 두가지 이유를 만족하기 위해서는 인포팀 만의 로그인 서비스가 필요했고, 이를 인포팀의 여러 어플리케이션에 연동하기 위해서는, 더 나아가서 지스트 구성원들이 만든 어플리케이션에 적용할 수 있도록 확장하기 위해서는 OAuth라는 프로토콜이 가지는 권한 부여 흐름이 필요했다.
따라서 2022년부터 OAuth2.0를 준수하는 infoteam-idp (이전이름: gistory-idp) 프로젝트가 시작되었다. 2023년 말에는 구현이 완료되어 ziggle에 연동이 되었다.
OAuth2.0에서 OAuth2.1로
OAuth2.0?
OAuth를 구현하는 방법 중에 하나로 이 프로토콜에서는 클라이언트, 리소스 소유자, 인증서버, 리소스 서버로 크게 4개의 객체가 있다.
- 클라이언트는 yes24와 같은 유저의 정보를 가지고 싶어하는 서비스
- 리소스 소유자는 유저
- 인증 서버는 OAuth의 인증을 수행하는 서버
- 리소스 서버는 유저의 정보를 가지고 있는 서버
위의 4개의 객체는 서로의 인증을 통해서 유저의 정보를 이용할 수 있다.
OAuth는 결국 유저의 정보를 클라이언트로 넘기는데, 이때, 유저의 허락을 받는 프로토콜이다. 이를 위한 방법은 OAuth2.0에서 네 가지가 허용된다.
- 권한 코드 인증
유저가 정보를 넘기는 것을 허락을 하면, 그에 대한 증명으로 특정한 코드를 클라이언트에게 넘기고, 그 코드를 인증 서버에 넘기면, 리소스 서버에 접근할 권한을 가진 토큰을 주는 방법. 위에서 yes24를 예로 든 방법이 이 방법이다. 플로우 그래프로 확인하면 아래와 같다.
sequenceDiagram participant IdP Frontend participant Client Frontend participant Client participant IdP critical Requesting Login Client Frontend ->> Client: Client ->> IdP Frontend: end IdP Frontend ->> IdP Frontend: login or signup IdP Frontend ->>+ IdP: Client_id, redirect_uri, scope, response_type note right of IdP: POST /oauth/authorize IdP ->>- IdP Frontend: code IdP Frontend ->> Client Frontend: REDIRECT redirect_uri?code={code} Client Frontend->>+ Client: code Client ->>+ IdP: Client_id, Client_secret, code, redirect_uri, grant_type note right of IdP: POST /oauth/token IdP ->>- Client: AccessToken or RefreshToken Client ->> Client: Service logic Client ->>- Client Frontend: AccessToken or RefreshToken alt get user info Client Frontend ->>+ Client: AccessToken Client ->>+ IdP: AccessToken note right of IdP: GET oauth/userinfo IdP ->>- Client: User info Client ->>- Client Frontend: User info else revoke token Client Frontend ->> Client: AccessToken or RefreshToken Client ->> IdP: AccessToken or RefreshToken note right of IdP: POST /oauth/revoke end
- 암묵적 인증
code없이 바로 토큰을 주는 방식
- 리소스 소유자 비밀번호 자격 증명 인증
클라이언트가 인증서버에게 유저의 아이디, 패스워드를 직접 받아서 토큰을 받는 방식
- 클라이언트 자격 증명인증
클라이언트에 대한 아이디/비번을 따로 발급해서 해당 인증정보를 인증서버에게 주면, 허용된 유저에 관한 정보를 클라이언트에게 넘기는 방식.
위의 방식으로 유저의 정보를 클라이언트로 넘기는 것을 OAuth2.1이라고 한다.
OAuth2.1
OAuth2.0에서 생길 수 있는 보안 문제를 삭제한 버전이다. 크게 5가지 사항이 추가/변경되었다.
- 인증 방법 중에서 암묵적 인증과, 리소스 소유자 비밀번호 자격 증명 인증이 삭제
해당 두 가지 방법은 보안 문제가 있으므로 삭제
- 모든 클라이언트에게 PKCE 사용을 강제
인증을 요청한 클라이언트와 그 결과 토큰을 받는 클라이언트가 같은지 확인하는 과정이 추가
- Redirection URI의 정확한 일치
- 클라이언트 유형에 대한 정의
- 리프레시 토큰에 대한 보안 요구 사항 추가
리프레시 토큰 회전 사용, 발신자 제한 리프레시 토큰 발행
OpenID connect
OAuth에서 나온 토큰을 통해서 다시 유저의 정보를 불러오는 것은 추가적인 api 요청을 필요로 한다. 이를 줄이기 위해서 나온것이 openid token이다.
JWT와 비슷하지만, Signture가 비대칭키인 JWS, JWE 기술을 이용해서 유저의 데이터가 인증 서버에서 나왔다는 것을 확실히 할 수 있다.
해당 토큰은 제한 시간이 짧다. 이는 이 토큰의 사용처가 토큰을 통해 리소스 서버에서 데이터를 받아오는 것이 아니라 토큰에 들어있는 유저의 데이터를 클라이언트에게 알리기 위함이기 때문이다. 따라서 리소스 서버에서 해당 토큰을 받는 로직은 없다.
Infoteam-idp
account-be
gsainfoteam • Updated Feb 1, 2026
기존 OAuth2.0이었던 idp가 OAuth2.1로 업데이트 중이다. (현재 be는 리프레시 토큰 요구 사항을 제외한 모든 요구 사항을 충족 중.)
만약 코드를 보거나 사용하고 싶다면, repository를 확인할 것.
하지만 이해하기 어려울 수 있는 부분을 여기서 보충 설명하겠다.
infoteam-idp는 토큰을 5개를 사용하기 때문에 이에 대한 설명이 더 필요하다.
- idp 사이트에 관한 access token
idp로그인이 되어있는지 확인하는 token
- idp 사이트에 관한 refresh token
idp로그인에 대한 refresh token
- OAuth access token
클라이언트에게 유저의 정보를 줄 수 있다는 인증 정보를 담은 token
- OAuth refresh token
클라이언트가 가질 수 있는 OAuth access token을 위한 refresh token
- OAuth openid token
클라이언트에게 유저의 정보를 전해주기 위한 token




